<?php

/**
 * Description of UtenteDataManager
 *
 * @author rocco
 */
require_once  '../bean/Classe.php';
require_once  '../bean/Studente.php';
class ClasseDataManager
{
    private static $instance;

    public static function getInstance()
    {
        if(self::$instance == null)
        {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function insertClasse($connection, $classe, $sezione, $indirizzo)
    {
        $query = "Insert into Classe (classe,sezione, codiceIndirizzo, codiceScuola) VALUES(?, ?, ?, ?) ";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "sssi", $classe,$sezione, $indirizzo, $_COOKIE["codiceScuola"]);
        $stmt->execute();
        $stmt->close();
    }

    public function  getClassi($connection)
    {
        $query = "Select Classe.codice as codiceClasse, classe, sezione, descrizione, Classe.codiceIndirizzo as codiceIndirizzo from Classe, Indirizzo where Classe.codiceIndirizzo=Indirizzo.codice and Classe.codiceScuola=" . $_COOKIE["codiceScuola"];
        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceClasse, $ordClasse, $sezione, $descrizioneIndirizzo, $codiceIndirizzo);

        $lista = array();

        while ($stmt->fetch())
        {
            $classe = new Classe();
            $classe->setClasse($ordClasse);
            $classe->setCodice($codiceClasse);
            $classe->setCodiceIndirizzo($codiceIndirizzo);
            $classe->setDescrizioneIndirizzo(stripslashes($descrizioneIndirizzo));
            $classe->setSezione($sezione);
            $lista[] = $classe;
        }
        $stmt->close();
        return $lista;
    }

    public function getClassiByUser($connection, $userLoggato)
    {
        $query = "Select Classe.codice as codiceClasse, classe, sezione, descrizione from Classe, Indirizzo where Indirizzo.codice = Classe.codiceIndirizzo AND Classe.codiceScuola=" . $_COOKIE["codiceScuola"];
        $stmt = $connection->prepare($query);
        $stmt->execute();
//        echo 'from : '.$from .' to : ' .$to;
        return $stmt;
    }

    public function getStudentiByClasse($connection, $codiceClasse)
    {
        $query = "Select codice from Studente where codiceClasse = ? AND codiceScuola = ". $_COOKIE["codiceScuola"];

        if($stmt = $connection->prepare($query))
        {
          $stmt->bind_param( "i", $codiceClasse);
          $stmt->execute();
        }

        $stmt->bind_result($codiceStudente);

        $lista = array();

        while ($stmt->fetch())
        {
            $lista[] = $codiceStudente;
        }
        $stmt->close();
        return $lista;
    }

    public function existClass($connection, $classe, $sezione, $indirizzo)
    {
        $result=FALSE;
        $query = "Select codice from Classe where classe = ? and sezione = ? and codiceIndirizzo = ? and codiceScuola = ". $_COOKIE["codiceScuola"];
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "isi", $classe, $sezione, $indirizzo);
        $stmt->execute();
        $stmt->bind_result($codice);

        if ($stmt->fetch())
            $result=TRUE;

        $stmt->close();
        return $result;
    }

    public function getStudenti($connection, $nome, $cognome, $classe)
    {
        $query = "Select Studente.codice as codiceStudente,
            nome,
            cognome,
            dataCreazione, 
            email, 
            Classe.classe as ordClasse, 
            Classe.sezione as sezione, 
            Indirizzo.descrizione as descrizioneIndirizzo,
            username, password
            from Studente, Classe, Indirizzo
            where Studente.codiceClasse = Classe.codice
             AND Classe.codiceIndirizzo=Indirizzo.codice
             AND Classe.codiceScuola=Studente.codiceScuola
             AND Classe.codiceScuola=" . $_COOKIE["codiceScuola"];
        if(!$nome == "")
        {
            $query1=" AND UPPER(Studente.nome) LIKE UPPER('%". mysql_escape_string($nome) . "%')";
            $query = $query . $query1;
        }
        if($cognome!== "")
        {
            $query2 = " AND UPPER(Studente.cognome) LIKE UPPER('%". mysql_escape_string($cognome) . "%')";
            $query = $query . $query2;
        }
        if($classe !== "")
        {
            $query3 =" AND Classe.codice = ". mysql_escape_string($classe) . "";
            $query = $query . $query3;
        }

//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceStudente, $nome,$cognome, $dataCreazione, $email, $ordClasse, $sezione, $descrizioneIndirizzo, $username, $password);

        $lista = array();

        while ($stmt->fetch())
        {
            $studente = new Studente();
            $studente->setCodiceStudente($codiceStudente);
            $studente->setCognome(stripslashes($cognome));
            $studente->setDataCreazione($dataCreazione);
            $studente->setDescrizioneIndirizzo(stripslashes($descrizioneIndirizzo));
            $studente->setEmail(stripslashes($email));
            $studente->setNome(stripslashes($nome));
            $studente->setOrdClasse($ordClasse);
            $studente->setSezione($sezione);
            $studente->setUsername($username);
            $studente->setPassword($password);

            $lista[] = $studente;
        }
        $stmt->close();
        return $lista;

    }

    public function getLastClasseInserted($connection)
    {
        $query = "Select max(codice) as codice from Classe ";
        $stmt = $connection->prepare($query);
        $stmt->execute();
        $stmt->bind_result($codice);

        if ($stmt->fetch())
            $result=$codice;

        $stmt->close();
        return $result;
    }

    public function getClasse($connection, $codiceClasse)
    {
        $query = sprintf("Select Classe.codice, classe as ordClasse, sezione, descrizione
            from Classe, Indirizzo where Classe.codiceScuola=".$_COOKIE["codiceScuola"]." AND Classe.codiceIndirizzo = Indirizzo.codice And Classe.codice = %d", $codiceClasse);
        if($stmt = $connection->prepare($query))
            $stmt->execute();
        $stmt->bind_result($codice, $ordClasse, $sezione, $indirizzo);

        if ($stmt->fetch())
        {
            $classe = new Classe();
            $classe->setClasse($ordClasse);
            $classe->setCodice($codice);
            $classe->setDescrizioneIndirizzo(stripslashes($indirizzo));
            $classe->setSezione($sezione);
        }

        $stmt->close();
        return $classe;
    }

    public function getStudenteByCodice($connection, $codice)
    {
        $query = sprintf("Select Studente.codice as codiceStudente,
            nome,
            cognome,
            dataCreazione,
            email,
            Classe.classe as ordClasse,
            Classe.sezione as sezione,
            Indirizzo.descrizione as descrizioneIndirizzo,
            username, password
            from Studente, Classe, Indirizzo
            where Studente.codiceClasse = Classe.codice
            AND Classe.codiceScuola=Studente.codiceScuola
            AND Classe.codiceIndirizzo=Indirizzo.codice AND Classe.codiceScuola=".$_COOKIE["codiceScuola"]." AND Studente.codice = %d", $codice);


//        echo 'query = ' .$query;

        if($stmt = $connection->prepare($query))
            $stmt->execute();

        $stmt->bind_result($codiceStudente, $nome,$cognome, $dataCreazione, $email, $ordClasse, $sezione, $descrizioneIndirizzo, $username, $password);

        
        if ($stmt->fetch())
        {
            $studente = new Studente();
            $studente->setCodiceStudente($codiceStudente);
            $studente->setCognome(stripslashes($cognome));
            $studente->setDataCreazione($dataCreazione);
            $studente->setDescrizioneIndirizzo(stripslashes($descrizioneIndirizzo));
            $studente->setEmail(stripslashes($email));
            $studente->setNome(stripslashes($nome));
            $studente->setOrdClasse($ordClasse);
            $studente->setSezione($sezione);
            $studente->setUsername($username);
            $studente->setPassword($password);

        }
        $stmt->close();
        return $studente;

    }

    public function eliminaStudente($connection, $codice)
    {
        $query = "delete from TestStudentiRisultati where codiceStudente = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codice);
        $stmt->execute();
        $stmt->close();

        $query = "delete from TestStudenti where codiceStudente = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codice);
        $stmt->execute();
        $stmt->close();

        $query = "delete from Studente where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codice);
        $stmt->execute();
        $stmt->close();
    }

    public function eliminaClasse($connection, $codice)
    {
        $lista=ClasseDataManager::getInstance()->getStudentiByClasse($connection, $codice);
        for($i=0;$i<count($lista);$i++)
        {
            ClasseDataManager::getInstance()->eliminaStudente($connection, $lista[$i]);
        }
        $query = "delete from Classe where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "i", $codice);
        $stmt->execute();
        $stmt->close();
    }

    public function aggiornaCredenziali($connection, $codice, $username, $password)
    {
        $query =  "Update Studente set username = ?, password = ? where codice = ?";
        $stmt = $connection->prepare($query);
        $stmt->bind_param( "ssi", $username, $password, $codice);
        $stmt->execute();
        $stmt->close();
    }


}
?>
